<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <!-- <meta http-equiv="X-UA-Compatible" content="IE=edge"> -->
    <!-- <meta name="viewport" content="width=device-width, initial-scale=1.0"> -->
    <title>1_类的基本知识</title>
</head>
<body>
    <script type="text/javascript">
        /*
        总结：
            1、类中的构造器不是必须写的，要对实列进行一些初始化的操作，如添加指定属性时才写。
            2、如果A类继承了B类，且A类中写了构造器，那么A类构造器中的super是必须要调用的。
            3、类中所定义的方法，都是放在了类的原型对象上，供实列去使用。
        */
        // 创建一个Person类
        class Person{
            //构造器方法
            constructor(name,age) {
                // 构造器中的this是谁？-类的实列对象
                this.name = name
                this.age = age
            }
            //一般方法
            speak(){
                //speak方法放在哪里？-类的原型对象上，提供实列使用
                //通过Person实列调用speak时，speak中的this就是Person实列
                console.log(this)
                console.log(this.name)
                console.log('我叫' + this.name + '我的年龄是' + this.age);
            }
        }
        // 创建一个Person的实列对象
        const p1 = new Person('tom',20)
        const p2 = new Person('jerry',19)

        console.log(p1)
        console.log(p2)
        p1.speak()
        p2.speak()
        //创建一个Student类,继承于Person类
        class Student extends Person{
            constructor(name,age,grade) {
                super(name,age)
                this.grade = grade
            }
            speak(){
                console.log('我是'+this.name,'我的年龄是'+this.age,'我现在读'+ this.grade)
            }
            study(){
                console.log('我很努力的学习')
            }
        }
        const s1 = new Student('小张',18,'高一')
        
        console.log(s1)
        s1.speak()
        s1.study()

        class Car {
            constructor(name,price){
                this.name = name;
                this.price = price;
                // this.wheel = 4
            }
            //类中可以直接写赋值语句，如下代码的含义是给car的实列对象添加一个属性，名为a值为1
            a = 1
            wheel = 4
        }
        const c1 = new Car('奔驰',199)
        console.log(c1)
    </script>
</body>
</html>